﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-10-8 16:09:41
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.Data.Components.Structures
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// 默认列实例。
    /// </summary>
    public class Field : IField
    {
        /// <summary>
        /// 初始化类<see cref="Field"/>。
        /// </summary>
        /// <param name="name">列名称。</param>
        /// <param name="dataType">列类型。</param>
        /// <param name="size">大小。</param>
        /// <param name="properties">属性。</param>
        public Field(string name, Type dataType, int size, FieldProperties properties)
        {
            if(String.IsNullOrEmpty(name))
                throw new ArgumentNullException("name");
            if(dataType == null)
                throw new ArgumentNullException("dataType");

            Name = name;
            DataType = dataType;
            Properties = properties;
            Size = size;
        }
        /// <summary>
        /// 获取或设置列名称。
        /// </summary>
        public virtual string Name { get; protected set; }

        /// <summary>
        /// 获取或设置列类型。
        /// </summary>
        public virtual Type DataType { get; protected set; }

        /// <summary>
        /// 获取或设置列属性。
        /// </summary>
        public virtual FieldProperties Properties { get; protected set; }

        /// <summary>
        /// 获取或设置列大小。
        /// </summary>
        public virtual int Size { get; protected set; }

        /// <summary>
        /// 判断当前列是否包含属性。
        /// </summary>
        /// <param name="property">列属性实例。</param>
        /// <returns>如果保存返回<c>true</c>，否则返回<c>false</c>。</returns>
        public virtual bool HasProperty(FieldProperties property)
        {
            return (Properties & property) == property;
        }
        /// <summary>
        /// 返回列字符串。
        /// </summary>
        /// <returns>返回列字符串。</returns>
        public override string ToString()
        {
            return string.Format("{0} ({1})", Name, DataType.FullName);
        }
    }
}
